redis
==============================================================
一：安装

    官网下载地址：http://redis.io/download

    ~]# yum -y install gcc
    ~]# cd src
    ~]# make
        # make MALLOC=libc   解决部分错误使用。
    <!-- ~]# make install -->

    配置文件：源码根目录
    ~]# mkdir /etc/redis/
    ~]# cp redis.conf /etc/redis/

二：配置
    ~]# ls /usr/local/bin/
        redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server

pidfile /var/run/redis_6379.pid
redis-server

#停止客户端
redis-cli shutdown

~]# vim /etc/redis/redis.conf
监听端口和地址
#bind 127.0.0.1

# yes 是在后台运行
# daemonize no
daemonize yes

# cluster-enabled yes
cluster-enabled yes

# cluster-config-file nodes-6379.conf
cluster-config-file nodes-6379.conf

# cluster-node-timeout 15000
cluster-node-timeout 15

启动服务：
~]#  redis-server /etc/redis/redis.conf


~]# redis-cli
cluster nodes  命令用于查看当前Redis节点所属的Redis集群中的所有节点，
cluster info    则用于查看当前Redis节点所属的Redis集群的整体状
cluster meet    将当前节点主动添加节点
cluster addslots
cluster delslots
cluster setslot
[root@localhost redis]# redis-cli
127.0.0.1:6379> cluster nodes
    5be8eec2cee607d14ee5cd6f24ee296365d49ec9 :6379 myself,master - 0 0 0 connected

127.0.0.1:6379> cluster info
    cluster_state:fail
    cluster_slots_assigned:0
    cluster_slots_ok:0
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:1
    cluster_size:0
    cluster_current_epoch:0
    cluster_my_epoch:0
    cluster_stats_messages_sent:0
    cluster_stats_messages_received:0

127.0.0.1:6379> cluster meet 172.18.21.61 6379
    OK

127.0.0.1:6379> cluster nodes
    bf030d5a9570b66c41a38bdfb89b36e6cf654e58 172.18.21.61:6379 master - 0 1466854370204 0 connected
    5be8eec2cee607d14ee5cd6f24ee296365d49ec9 172.18.21.60:6379 myself,master - 0 0 1 connected

[root@localhost redis]# cat /etc/redis/nodes-6379.conf 
    bf030d5a9570b66c41a38bdfb89b36e6cf654e58 172.18.21.61:6379 master - 0 1466854584926 0 connected
    5be8eec2cee607d14ee5cd6f24ee296365d49ec9 172.18.21.60:6379 myself,master - 0 0 1 connected
    vars currentEpoch 1 lastVoteEpoch 0








http://blog.sina.com.cn/s/blog_48c95a190101dhe9.html

kill -9 `cat /var/run/redis_6379.pid`
启动
redis-server /etc/redis/redis.conf


#主服务器
redis-cli -p 6379 set hello world

#从服务器
redis-cli -p 6379 get hello
"world"

#主服务器
redis-cli -p 6379 set hello world2

#从服务器
redis-cli -p 6379 get hello
"world2"
redis-cli -p 6379 set hello world
(error) READONLY You can't 




yum -y install ruby rubygems




pkgs.org
yum localinstall
backlog 等待队列

事务：
muti exec 



jenkins 监控

@connection
auth
echo
ping
quit
select


glient 
config
config resetstat
config set
config rewrite
dbsize


help info
info memory

lastsave
monitor

shutdown
slaveof
slowlog
sync
time

订阅与发布：
subscribe
subscribe news
publish news hello
psubscribe：模式订阅

持久化：
    rdb和aof
    rdb：snapshot，二进制格式，事先定制策略，周期性的保存至磁盘，数据文件默认为dump.rdb
            客户端可显示使用save或bgsave命令自动执行保存机制。
            save（同步）：在主线程中保存快照，此时会阻塞所有客户端请求。
            bgsave（异步）：

    aof：append only file：合并重写aof文件，
        记录每一次写操作至指定的文件尾部实现持久化。当redis重启时，可通过重新执行文件的命令在内存重建数据库，
        不会读取正在使用的aof文件，而通过将内存中的数据以命令的方式保存到临时文件中，完成之后替换原来的aof文件。

    bgsave bgrewriteaof 不会同时执行，
    恢复数据时优先使用aof

    复制：
        特点：
            一个master可以有多个slave
            支持链式复制
            master以非阻塞方式同步数据至slave



slaveof 172.18.21.60 6379 指明主库

列出所有key
keys *

config get slaveof



主服务器使用认证，从服务器要使用 masterauth password 才能正常进行主从复制。

    sentinel：用于管理多个redis服务器实现ha
        监控
        通知
        自动化故障迁移

        程序：
            redis-sentinel /path/to/file.conf
            redis-server /path/to/file.conf  --sentinal






/*
redis 使用
查看所有key
~]# keys *

切换数据库
~]#  select 1

删除当前数据库中的所有Key  
~]# flushdb  

删除所有数据库中的key  
~]# flushall  

删除某个key
~]# del key
*/









--------------------------------file start---------------------------------------------
#!/usr/bin/env bash
#
# redis start up the redis server daemon
#
# chkconfig: 345 99 99
# description: redis service in /etc/init.d/redis \
#             chkconfig --add redis or chkconfig --list redis \
#             service redis start  or  service redis stop
# processname: redis-server
# config: /etc/redis.conf

PATH=/usr/local/bin:/sbin:/usr/bin:/bin

REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli

PIDFILE=/var/run/redis.pid
CONF="/etc/redis.conf"
#make sure some dir exist
if [ ! -d /var/lib/redis ] ;then
    mkdir -p /var/lib/redis
    mkdir -p /var/log/redis
fi

case "$1" in
    status)
        ps -A|grep redis
        ;;
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        if [ "$?"="0" ]
        then
              echo "Redis is running..."
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $REDIS_CLI -p $REDISPORT SHUTDOWN
                while [ -x ${PIDFILE} ]
               do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
   restart|force-reload)
        ${0} stop
        ${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
        exit 1
esac
--------------------------------file end---------------------------------------------